using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ParcelTools
{
    /// <summary>
    /// <para>Generate Parcel Fabric Links</para>
    /// <para>Generates displacement links for parcel fabric points that have changed
    /// locations in a specified time period.</para>
    /// <para>为已更改的宗地结构点生成置换链接
    /// 指定时间段内的位置。</para>
    /// </summary>    
    [DisplayName("Generate Parcel Fabric Links")]
    public class GenerateParcelFabricLinks : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateParcelFabricLinks()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_target_parcel_fabric">
        /// <para>Input Parcel Fabric</para>
        /// <para>The parcel fabric that will be used to generate links. The parcel fabric must be published as a feature service and the default version is used to generate links.</para>
        /// <para>将用于生成链接的宗地结构。宗地结构必须发布为要素服务，并且默认版本用于生成链接。</para>
        /// </param>
        /// <param name="_out_links_feature_class">
        /// <para>Output Links Feature Class</para>
        /// <para>The output line feature class that will store the generated links.</para>
        /// <para>用于存储生成链接的输出线要素类。</para>
        /// </param>
        /// <param name="_out_anchor_points_feature_class">
        /// <para>Output Anchor Points Feature Class</para>
        /// <para>The output point feature class that will store the anchor points.</para>
        /// <para>用于存储锚点的输出点要素类。</para>
        /// </param>
        /// <param name="_from_date">
        /// <para>From Date</para>
        /// <para>The date from which to search the parcel fabric for points that have changed locations. Links and anchor points will be only be generated for points on or after this date.</para>
        /// <para>在宗地结构中搜索位置已更改的点的日期。链接和锚点将仅针对此日期或之后的点生成。</para>
        /// </param>
        public GenerateParcelFabricLinks(object _target_parcel_fabric, object _out_links_feature_class, object _out_anchor_points_feature_class, object _from_date)
        {
            this._target_parcel_fabric = _target_parcel_fabric;
            this._out_links_feature_class = _out_links_feature_class;
            this._out_anchor_points_feature_class = _out_anchor_points_feature_class;
            this._from_date = _from_date;
        }
        public override string ToolboxName => "Parcel Tools";

        public override string ToolName => "Generate Parcel Fabric Links";

        public override string CallName => "parcel.GenerateParcelFabricLinks";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_target_parcel_fabric, _out_links_feature_class, _out_anchor_points_feature_class, _from_date, _to_date, _min_link_length, _extent];

        /// <summary>
        /// <para>Input Parcel Fabric</para>
        /// <para>The parcel fabric that will be used to generate links. The parcel fabric must be published as a feature service and the default version is used to generate links.</para>
        /// <para>将用于生成链接的宗地结构。宗地结构必须发布为要素服务，并且默认版本用于生成链接。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Parcel Fabric")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_parcel_fabric { get; set; }


        /// <summary>
        /// <para>Output Links Feature Class</para>
        /// <para>The output line feature class that will store the generated links.</para>
        /// <para>用于存储生成链接的输出线要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Links Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_links_feature_class { get; set; }


        /// <summary>
        /// <para>Output Anchor Points Feature Class</para>
        /// <para>The output point feature class that will store the anchor points.</para>
        /// <para>用于存储锚点的输出点要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Anchor Points Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_anchor_points_feature_class { get; set; }


        /// <summary>
        /// <para>From Date</para>
        /// <para>The date from which to search the parcel fabric for points that have changed locations. Links and anchor points will be only be generated for points on or after this date.</para>
        /// <para>在宗地结构中搜索位置已更改的点的日期。链接和锚点将仅针对此日期或之后的点生成。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("From Date")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _from_date { get; set; }


        /// <summary>
        /// <para>To Date</para>
        /// <para>The end date of the time period in which to search the parcel fabric for points that have changed locations. Links and anchor points will only be generated for points on or before this date. If no To date is specified, links and anchor points will be generated for all points on or after the specified From Date. If the To Date is specified at a future date, links will be generated in the time period between the From Date and the current date and time.</para>
        /// <para>在宗地结构中搜索已更改位置的点的时间段的结束日期。链接和锚点将仅针对此日期或之前的点生成。如果未指定“截至日期”，则将为指定“开始日期”当天或之后的所有点生成链接和锚点。如果在将来的某个日期指定了“结束日期”，则将在“开始日期”与当前日期和时间之间的时间段内生成链接。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Date")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_date { get; set; } = null;


        /// <summary>
        /// <para>Minimum Link Length</para>
        /// <para>The minimum length of the generated links. If the link length between the current points and their original locations is smaller than the specified value, anchor points are created for the original locations of the points.</para>
        /// <para>生成的链接的最小长度。如果当前点与其原始位置之间的链接长度小于指定值，则为点的原始位置创建锚点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Link Length")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _min_link_length { get; set; } = "0.01 Meters";


        /// <summary>
        /// <para>Extent</para>
        /// <para><xdoc>
        ///   <para>The extent of the dataset to be processed. Only features that fall within the specified extent will be processed.</para>
        ///   <bulletList>
        ///     <bullet_item>Default—The extent will be based on the maximum extent of all participating inputs. This is the default.</bullet_item><para/>
        ///     <bullet_item>Union of Inputs—The extent will be based on the maximum extent of all inputs.</bullet_item><para/>
        ///     <bullet_item>Intersection of Inputs—The extent will be based on the minimum area common to all inputs.</bullet_item><para/>
        ///     <bullet_item>Current Display Extent—The extent is equal to the visible display. The option is not available when there is no active map.</bullet_item><para/>
        ///     <bullet_item>As Specified Below—The extent will be based on the minimum and maximum extent values specified.</bullet_item><para/>
        ///     <bullet_item>Browse—The extent will be based on an existing dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要处理的数据集的范围。仅处理指定范围内的要素。</para>
        ///   <bulletList>
        ///     <bullet_item>默认值 - 范围将基于所有参与输入的最大范围。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>输入并集 - 范围将基于所有输入的最大范围。</bullet_item><para/>
        ///     <bullet_item>输入交点 - 范围将基于所有输入共有的最小面积。</bullet_item><para/>
        ///     <bullet_item>当前显示范围 - 范围等于可见显示。当没有活动地图时，该选项不可用。</bullet_item><para/>
        ///     <bullet_item>如下所述 - 范围将基于指定的最小和最大范围值。</bullet_item><para/>
        ///     <bullet_item>浏览 - 范围将基于现有数据集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Extent")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _extent { get; set; } = null;


        public GenerateParcelFabricLinks SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}